namespace ContosoUniversity.Services.QueryServices
{
    using System;
    using System.Collections.Generic;
    using System.Linq.Expressions;
    using System.Threading.Tasks;
    using Models;

    public interface IInstructorControllerQueryService
    {
        Task<IEnumerable<Course>> GetAllCoursesAsync();

        Task<IEnumerable<Instructor>> GetAllInstructorsWithAdditionalEntitesAsync(params string[] includes);

        Task<IEnumerable<Instructor>> GetAllInstructorsOrderedByName();

        Task<Department> GetDepartmentAsync(int departmentId);

        Task<Instructor> GetInstructorWithAdditionalEntitiesAsync(int instructorId, params string[] includes);

        Task<Course> GetCourseAync(int courseId);

        Task<Instructor> GetInstructorAsync(int instructorId, params Expression<Func<Instructor,object>>[] includes );

        void LoadCourseEnrollmentsIntoCourse(Course course);
    }
}